#include "savetyfs.h"

SaveTYFS::SaveTYFS(QObject *parent) : SaveBase(parent)
{

}

bool SaveTYFS::saveData(const QString &data)
{
    if(!m_file.isOpen() || m_saveCount >= 1000) {
        createNewFile();
    }

    m_file.write(data.toUtf8());
    m_file.close();
    qDebug() << "完成一次TYFS存储";
    return true;
}

void SaveTYFS::onWorking(const QString ip, const quint16 port, const QByteArray arr)
{
    if(!m_saveStatues || arr.isEmpty() || ip != m_srcIP) {
        return;
    }

    QString str=QString(arr).trimmed();
    str=str.mid(1);

    QString coredata=str.left(str.length()-2);

    QString devadd=coredata.mid(0,4);
    QString cmd=coredata.mid(4,4);
    QString time=coredata.mid(8,12);
    QString datapart=coredata.mid(20);

    QStringList fileds;

    for (int i=0;i<datapart.length();i+=4) {
        fileds<<datapart.mid(i,4);
    }
    quint16 val;
    bool ok;
    //    if (fileds.size()>39)
    //    {
    //        qDebug()<<fileds[39];
    //        val=fileds[39].toUInt(&ok,16);
    //        qDebug()<<val;
    //        if(ok)
    //        {
    //            float fs_2=static_cast<quint16>(val)*0.001f;
    //            qDebug()<<77777;
    //            qDebug()<<fs_2;
    //            ui->tolfs_solar_2->setText(QString::number(fs_2,'f',3));
    //        }
    //    }
    if (fileds.size()>36)
    {
        qDebug()<<fileds[36];
        val=fileds[36].toUInt(&ok,16);
        if(ok)
        {
            float fs_1=static_cast<quint16>(val)*0.001f;
            qDebug()<<fs_1;
            //ui->lineEdit_42->setText(QString::number(fs_1,'f',3)); //太阳辐射计信息
            QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd:hh-mm-ss-zzz");
            QString tyfs =  QString::number(fs_1,'f',3);
            saveData(QString("%1 太阳辐射:%2").arg(timeStr).arg(tyfs));
        }
    }
}

void SaveTYFS::createNewFile()
{
    // 检查磁盘是否可用
    if (!checkAndSwitchDisk()) {
        return; // 所有磁盘不可用，直接返回
    }

    // 关闭当前文件
    if (m_file.isOpen()) {
        m_file.close();
    }

    // 构造完整文件路径：磁盘路径/基础路径/视频名称/文件名
    QString currentDisk = m_diskPaths[m_currentDiskIndex];
    QString fullDir = QString("%1/%2/%3").arg(currentDisk).arg(m_fileSavePath).arg(m_videoName);
    QDir dir(fullDir);
    if (!dir.exists() && !dir.mkpath(".")) { // 确保目录存在
        qDebug() << "无法创建目录:" << fullDir;
        return;
    }

    // 生成文件名（包含时间戳）
    m_fileStartTime = QDateTime::currentDateTime();
    QString fileName = QString("%1/%2_%3.h264")
            .arg(fullDir)
            .arg(m_desc)
            .arg(m_fileStartTime.toString("yyyy_MM_dd_hh_mm_ss"));

    m_file.setFileName(fileName);
    if (!m_file.open(QIODevice::WriteOnly)) {
        qDebug() << "无法创建文件:" << fileName << "错误:" << m_file.errorString();
        return;
    }

    qDebug() << "创建新文件: " << fileName;
}
